package com.taijihuabao.modules.service;

import com.taijihuabao.common.commonutils.PageResult;
import com.taijihuabao.modules.model.approval.dto.ApprovalProcessDTO;
import com.taijihuabao.modules.model.approval.dto.ApproveCompleteDTO;
import com.taijihuabao.modules.model.approval.vo.ApprovalVO;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.context.annotation.Scope;
import java.util.List;

/**
 * @author xiao 、xue
 */
@Scope("prototype")
public interface ApprovalProcessService {

    /**
     * 查询待办
     * @param processName
     * @return
     */
    <T> List<T> findTask(String processName);

    /**
     * 查询已审批
     * @param processName
     * @return
     */
    <T> List<T> findCompleteTask(String processName);

    /**
     * 查询申请人的所有审批单
     * @param page
     * @param size
     * @return
     */
    PageResult<T> selectByApplyUserId(int page, int size);

    /**
     * 根据审批编码查询审批单结果
     *
     * @param approvalCode
     * @return
     */
    ApprovalVO selectByApprovalCode(String approvalCode);

    /**
     * 根据approvalCode查询流程进程（进度）
     * @param approvalCode
     * @return
     */
    <T> List<T> findActivities(String approvalCode);

    /**
     * 启动流程
     * @param approvalProcessDTO
     * @return String
     */
    String startProcess(ApprovalProcessDTO approvalProcessDTO);

    /**
     * 办理任务
     *
     * @param approveCompleteDTO
     */
    void completeTask(ApproveCompleteDTO approveCompleteDTO);

    /**
     * 退回重新提交
     * @param approvalProcessDTO
     * @return String
     */
    String reSubmit(ApprovalProcessDTO approvalProcessDTO);

    /**
     * 流程部署
     */
    void deploy();

    /**
     * 获取审批流程的名称
     * @return
     */
    String getProcessName();

}
